import pandas as pd
import json
import requests
class xms_quants_data_client:
    '''
    西蒙斯金融量化交易数据库
    作者:西蒙斯量化
    微信:xms_quants1
    朋友微信:xg_quant
    '''
    def __init__(self,
            url='http://124.220.32.224',
            port='8080',
            password='test'):
        self.url=url
        self.port=port
        self.password=password
    def get_user_info(self):
        '''
        获取使用者信息
        '''
        url='{}:{}/{}?'.format(self.url,self.port,'get_user_info')
        params={
           'password':self.password
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res
    def check_password_is_av_user(self):
        '''
        检查授权码是否可以使用
        '''
        url='{}:{}/{}?'.format(self.url,self.port,'check_password_is_av_user')
        params={
           'password':self.password
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res

    def get_full_tick(self,stock='513100.SH'):
        '''
        获取tick数据
        'time'                  #时间戳
        'lastPrice'             #最新价
        'open'                  #开盘价
        'high'                  #最高价
        'low'                   #最低价
        'lastClose'             #前收盘价
        'amount'                #成交总额
        'volume'                #成交总量
        'pvolume'               #原始成交总量
        'stockStatus'           #证券状态
        'openInt'               #持仓量
        'lastSettlementPrice'   #前结算
        'askPrice'              #委卖价
        'bidPrice'              #委买价
        'askVol'                #委卖量
        'bidVol'                #委买量
        'transactionNum'		#成交笔数
        '''
        url='{}:{}/{}?'.format(self.url,self.port,'get_full_tick')
        params={
            'password':self.password,
            'stock':stock
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res
    def get_full_all_tick(self,code_list=['513100.SH','600031.SH']):
        '''
        获取多个标的tick数据
        http://127.0.0.1:5000/get_full_all_tick?code_list=513100.SH,600031.SH
        'time'                  #时间戳
        'lastPrice'             #最新价
        'open'                  #开盘价
        'high'                  #最高价
        'low'                   #最低价
        'lastClose'             #前收盘价
        'amount'                #成交总额
        'volume'                #成交总量
        'pvolume'               #原始成交总量
        'stockStatus'           #证券状态
        'openInt'               #持仓量
        'lastSettlementPrice'   #前结算
        'askPrice'              #委卖价
        'bidPrice'              #委买价
        'askVol'                #委卖量
        'bidVol'                #委买量
        'transactionNum'		#成交笔数
        '''
        url='{}:{}/{}?'.format(self.url,self.port,'get_full_all_tick')
        params={
            'password':self.password,
            'code_list':','.join(code_list)
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res
    def get_market_data_ex(self,
            stock_code='513100.SH', 
            period='1d', 
            start_time='20250101', 
            end_time='20500101', 
            count=-1):
        '''
        获取历史行情数据
        :param field_list: 行情数据字段列表，[]为全部字段
            K线可选字段：
                "time"                #时间戳
                "open"                #开盘价
                "high"                #最高价
                "low"                 #最低价
                "close"               #收盘价
                "volume"              #成交量
                "amount"              #成交额
                "settle"              #今结算
                "openInterest"        #持仓量
            分笔可选字段：
                "time"                #时间戳
                "lastPrice"           #最新价
                "open"                #开盘价
                "high"                #最高价
                "low"                 #最低价
                "lastClose"           #前收盘价
                "amount"              #成交总额
                "volume"              #成交总量
                "pvolume"             #原始成交总量
                "stockStatus"         #证券状态
                "openInt"             #持仓量
                "lastSettlementPrice" #前结算
                "askPrice1", "askPrice2", "askPrice3", "askPrice4", "askPrice5" #卖一价~卖五价
                "bidPrice1", "bidPrice2", "bidPrice3", "bidPrice4", "bidPrice5" #买一价~买五价
                "askVol1", "askVol2", "askVol3", "askVol4", "askVol5"           #卖一量~卖五量
                "bidVol1", "bidVol2", "bidVol3", "bidVol4", "bidVol5"           #买一量~买五量
        :param stock_list: 证券代码 "000001.SZ"
        :param period: 周期 分笔"tick" 分钟线"1m"/"5m" 日线"1d"
        :param start_time: 起始时间 "20200101" "20200101093000"
        :param end_time: 结束时间 "20201231" "20201231150000"
        :param count: 数量 -1全部/n: 从结束时间向前数n个
        :param dividend_type: 除权类型"none" "front" "back" "front_ratio" "back_ratio"
        :param fill_data: 对齐时间戳时是否填充数据，仅对K线有效，分笔周期不对齐时间戳
            为True时，以缺失数据的前一条数据填充
                open、high、low、close 为前一条数据的close
                amount、volume为0
                settle、openInterest 和前一条数据相同
            为False时，缺失数据所有字段填NaN
        :return: 数据集，分笔数据和K线数据格式不同
            period为'tick'时：{stock1 : value1, stock2 : value2, ...}
                stock1, stock2, ... : 合约代码
                value1, value2, ... : np.ndarray 数据列表，按time增序排列
            period为其他K线周期时：{field1 : value1, field2 : value2, ...}
                field1, field2, ... : 数据字段
                value1, value2, ... : pd.DataFrame 字段对应的数据，各字段维度相同，index为stock_list，columns为time_list
        
        '''
        url='{}:{}/{}?'.format(self.url,self.port,'get_market_data_ex')
        params={
            'password':self.password,
            'stock_code':stock_code, 
            'period':period, 
            'start_time':start_time, 
            'end_time':end_time, 
            
            
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res
    def data_to_pandas(self,data):
        try:
            df=pd.DataFrame(data)
        except:
            df=pd.DataFrame()
            for keys,value in data.items():
                df[keys]=[value]
                
        return df
    def get_wencai_data(self,
        query='今日涨停',
        ):
        '''
        获取问财数据
        '''
        url='{}:{}/{}?'.format(self.url,self.port,'get_wencai_data')
        params={
            'password':self.password,
            'query':query
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res
    def get_user_def_data(self,
        name='df',
        func= """
        import akshare as ak
        df = ak.stock_zt_pool_em(date='20250711')
        """):
        '''
        获取自定义函数数据
        '''
        url='{}:{}/{}?'.format(self.url,self.port,'get_user_def_data')
        params={
            'password':self.password,
            'name':name,
            "func":func
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res
    
    def get_bond_cov_spot_data(self,
            url='http://124.220.32.224',
            port='8023',
            date='20250711'):
        '''
        获取可转债实时数据
        '''
        func='''
        import requests
        import pandas as pd
        try:
            url='{}:{}/data/实时数据/{}.json?t=1752251108452'
            res=requests.get(url=url)
            res=res.json()
            df=pd.DataFrame(res)
        except Exception as e:
            print(e,'获取实时数据表有问题')
            df=pd.DataFrame()
        '''.format(url,port,date)
        df=self.get_user_def_data(func=func)
        return df
    def get_bond_cov_all_mr_factor_data(self,
            url='http://124.220.32.224',
            port='8023',
            date='20250711'):
        '''
        获取可转债全部默认因子数据
        '''
        func='''
        import requests
        import pandas as pd
        try:
            url='{}:{}/data/全部默认因子/{}.json?t=1752251108452'
            res=requests.get(url=url)
            res=res.json()
            df=pd.DataFrame(res)
        except Exception as e:
            print(e,'获取全部默认因子表有问题')
            df=pd.DataFrame()
        '''.format(url,port,date)
        df=self.get_user_def_data(func=func)
        return df
    def get_bond_cov_all_connect_factor_data(self,
            url='http://124.220.32.224',
            port='8023',
            date='20250711'):
        '''
        获取可转债合成因子因子数据
        '''
        func='''
        import requests
        import pandas as pd
        try:
            url='{}:{}/data/合成因子/{}.json?t=1752251108452'
            res=requests.get(url=url)
            res=res.json()
            df=pd.DataFrame(res)
        except Exception as e:
            print(e,'获取全部默认因子表有问题')
            df=pd.DataFrame()
        '''.format(url,port,date)
        df=self.get_user_def_data(func=func)
        return df
    def get_instrument_detail(self,stock='600031.SH'):
        '''
        获取可标的的基础数据
        ExchangeID - string 合约市场代码
        InstrumentID - string 合约代码
        InstrumentName - string 合约名称
        ProductID - string 合约的品种ID(期货)
        ProductName - string 合约的品种名称(期货)
        ExchangeCode - string 交易所代码
        UniCode - string 统一规则代码
        CreateDate - str 上市日期(期货)
        OpenDate - str IPO日期(股票)
        ExpireDate - int 退市日或者到期日
        PreClose - float 前收盘价格
        SettlementPrice - float 前结算价格
        UpStopPrice - float 当日涨停价
        DownStopPrice - float 当日跌停价
        FloatVolume - float 流通股本
        TotalVolume - float 总股本
        LongMarginRatio - float 多头保证金率
        ShortMarginRatio - float 空头保证金率
        PriceTick - float 最小价格变动单位
        VolumeMultiple - int 合约乘数(对期货以外的品种，默认是1)
        MainContract - int 主力合约标记，1、2、3分别表示第一主力合约，第二主力合约，第三主力合约
        LastVolume - int 昨日持仓量
        InstrumentStatus - int 合约停牌状态
        IsTrading - bool 合约是否可交易
        IsRecent - bool 是否是近月合约
        OpenInterestMultiple - int 交割月持仓倍数 

        '''
        url='{}:{}/{}?'.format(self.url,self.port,'get_instrument_detail')
        params={
            'password':self.password,
            'stock':stock
        }
        response = requests.get(
            url=url,
            params=params,
            timeout=300
        )
        res=response.json()
        return res
   
   
    def get_ths_get_limit_up_pool(self,date='20250711'):
        '''
        获取同花顺涨停数据
        '''
        func='''
        from trader_tool.ths_limitup_data import ths_limitup_data
        api=ths_limitup_data()
        stats,df=api.get_limit_up_pool(date='{}')
        print(df)
        '''.format(date)

        df=self.get_user_def_data(func=func)
        return df
    def stock_bid_ask_em(self,stock='600031'):
        '''
        获取盘口数据
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_bid_ask_em(symbol="{}")
        print(df)
        '''.format(stock)
        
        df=self.get_user_def_data(func=func)
        return df
    def stock_zh_a_spot_em(self):
        '''
        获取全市场实时数据
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_zh_a_spot_em()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def stock_zh_a_hist_daily(self,
            stock="000001", 
            start_date="20170301", 
            end_date='20240528', 
            adjust=""):
        func='''
        import xms_data_api as xms
        df=xms.stock_zh_a_hist(
        symbol="{}",period="daily", 
        start_date="{}", 
        end_date='{}', 
        adjust="{}")
        print(df)
        '''.format(stock,start_date,end_date,adjust)
        df=self.get_user_def_data(func=func)
        return df
    def stock_zh_a_hist_weekly(self,
            stock="000001", 
            start_date="20170301", 
            end_date='20240528', 
            adjust=""):
        func='''
        import xms_data_api as xms
        df=xms.stock_zh_a_hist(
        symbol="{}",period="weekly", 
        start_date="{}", 
        end_date='{}', 
        adjust="{}")
        print(df)
        '''.format(stock,start_date,end_date,adjust)
        df=self.get_user_def_data(func=func)
        return df
    def stock_zh_a_hist_monthly(self,
            stock="000001", 
            start_date="20170301", 
            end_date='20240528', 
            adjust=""):
        func='''
        import xms_data_api as xms
        df=xms.stock_zh_a_hist(
        symbol="{}",period="monthly", 
        start_date="{}", 
        end_date='{}', 
        adjust="{}")
        print(df)
        '''.format(stock,start_date,end_date,adjust)
        df=self.get_user_def_data(func=func)
        return df
    def stock_zh_a_hist_min_em(self,
        stock="000001", 
        start_date="20250101", 
        end_date="20500101", 
        period="1", 
        adjust=""):
        '''
        获取分钟数据
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_zh_a_hist_min_em(
            symbol="{}", 
            start_date="{}", 
            end_date="{}", 
            period="{}", 
            adjust="{}"
            )
        print(df)
        '''.format(stock,start_date,end_date,period,adjust)
        df=self.get_user_def_data(func=func)
        return df
    def get_stock_all_trader_data(self,stock='600031'):
        '''
        获取tick数据建议使用get_maker data ex
        '''
        func='''
        from trader_tool.stock_data import stock_data
        api=stock_data()
        df=api.get_stock_all_trader_data(stock='{}')
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_individual_info_em(self,stock='600031'):
        '''
        查询个股信息
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_individual_info_em(symbol='{}')
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_cyq_em(self,stock='600031'):
        '''
        获取筹码数据
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_cyq_em(symbol='{}')
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_board_industry_summary_ths(self):
        '''
        同花顺行业
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_industry_summary_ths()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def stock_board_industry_index_ths(self,
            symbol = "元件",
            start_date = "20240101",
            end_date= "20250108"):
        '''
        获取同花顺指数行情数据
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_industry_index_ths(
            symbol = "{}",
            start_date = "{}",
            end_date= "{}")
        print(df)
        '''.format(symbol,start_date,end_date)
        df=self.get_user_def_data(func=func)
        return df
    def stock_board_industry_name_em(self):
        '''
        获取东方财富全部行业
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_industry_name_em()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def stock_board_industry_spot_em(self,stock='证券'):
        '''
        获取行业实时数据
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_industry_spot_em(
            symbol='{}'
        )
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_board_industry_cons_em(self,stock='证券'):
        '''
        获取行业成分股
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_industry_cons_em(
            symbol='{}'
        )
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_board_industry_hist_em(self,
            stock='证券',
            start_date='20240101',
            end_date='20250101',
            period='日k',
            adjust=''):
        '''
        获取行业日线数据
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_industry_hist_em(
            symbol='{}',
            start_date='{}',
            end_date='{}',
            period='{}',
            adjust='{}'
        )
        print(df)
        '''.format(stock,start_date,end_date,period,adjust)
        df=self.get_user_def_data(func=func)
        return df
    def stock_board_industry_hist_min_em(self,stock='证券',period='1'):
        '''
        获取行业分钟数据
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_industry_hist_min_em(
            symbol='{}',
            period='{}',
        )
        print(df)
        '''.format(stock,period)
        df=self.get_user_def_data(func=func)
        return df
    

    def stock_board_concept_name_em(self):
        '''
        获取全部的概念板块
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_board_concept_name_em()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def stock_zt_pool_em(self,date='20250717'):
        '''
        获取涨停板数据
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_zt_pool_em(date='{}')
        print(df)
        '''.format(date)
        df=self.get_user_def_data(func=func)
        return df
    def stock_zt_pool_previous_em(self,date='20250717'):
        '''
        获取昨天涨停
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_zt_pool_previous_em(date='{}')
        print(df)
        '''.format(date)
        df=self.get_user_def_data(func=func)
        return df
    def stock_zt_pool_strong_em(self,date='20250717'):
        '''
        强势股票池
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_zt_pool_strong_em(date='{}')
        print(df)
        '''.format(date)
        df=self.get_user_def_data(func=func)
        return df
    def stock_zt_pool_zbgc_em(self,date='20250717'):
        '''
        炸板股池
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_zt_pool_zbgc_em(date='{}')
        print(df)
        '''.format(date)
        df=self.get_user_def_data(func=func)
        return df
    def stock_zt_pool_dtgc_em(self,date='20250717'):
        '''
        跌停
        '''
        func='''
        import xms_data_api as xms 
        df=xms.stock_zt_pool_dtgc_em(date='{}')
        print(df)
        '''.format(date)
        df=self.get_user_def_data(func=func)
        return df
    def get_t0_fund_data(self):
        '''
        获取全部ETFT0数据
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_t0_fund_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_all_etf_data_1(self):
        '''
        获取全部市场的基金数据
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        data=dfcf_etf_data()
        df=data.get_all_etf_data_1()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_all_etf_data(self):
        '''
        获取剔除类似ETF数据
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        data=dfcf_etf_data()
        df=data.get_all_etf_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def dfcf_etf_data(self):
        '''
        获取剔除类似ETF数据
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_sz_sh_etf()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_wp_etf_data(self):
        '''
        外盘基金
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_wp_etf_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_bond_etf_data(self):
        '''
        债券基金
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_bond_etf_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_sp_etf_data(self):
        '''
        商品基金
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_sp_etf_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_hot_spot_investment(self):
        '''
        热点etf
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_hot_spot_investment()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_index_fund_data(self):
        '''
        获取宽基金
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_index_fund_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_industry_fund_data(self):
        '''
        获取行业etf
        '''
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_industry_fund_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_hb_fund_data(self):
        '''
        获取货币基金
        '''
        
        func='''
        from trader_tool.dfcf_etf_data import dfcf_etf_data
        api=dfcf_etf_data()
        df=api.get_hb_fund_data()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_hot_stock_rank(self):
        '''
        同花顺股票日期排行
        '''
        func='''
        from trader_tool.ths_rq import ths_rq
        api=ths_rq()
        df=api.get_hot_stock_rank()
        print(df)
    
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_stock_concept_rot_rank(self):
        '''
        同花顺获取股票概念热度排行
        '''
        func='''
        from trader_tool.ths_rq import ths_rq
        api=ths_rq()
        df=api.get_stock_concept_rot_rank()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_stock_industry_rot_rank(self):
        '''
        同花顺股票行业热度排行
        '''
        func='''
        from trader_tool.ths_rq import ths_rq
        api=ths_rq()
        df=api.get_stock_industry_rot_rank()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_etf_hot_rank(self):
        '''
        同花顺ETF热度排行
        '''
        
        func='''
        from trader_tool.ths_rq import ths_rq
        api=ths_rq()
        df=api.get_etf_hot_rank()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_cov_bond_rot_rank(self):
        '''
        同花顺可转债热度排行
        '''
        func='''
        from trader_tool.ths_rq import ths_rq
        api=ths_rq()
        df=api.get_cov_bond_rot_rank()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def stock_fund_flow_individual(self,stock='即时'):
        '''
        同花顺个股资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_fund_flow_individual(symbol="{}")
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_fund_flow_concept(self,stock='即时'):
        '''
        同花顺概念资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_fund_flow_concept(symbol="{}")
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_fund_flow_industry(self,stock='即时'):
        '''
        同花顺行业资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_fund_flow_industry(symbol="{}")
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def stock_fund_flow_big_deal(self):
        '''
        同花顺大单追踪
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_fund_flow_big_deal()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def stock_individual_fund_flow(self,stock="600031", market="sh"):
        '''
        东方财富个股资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_individual_fund_flow(stock="{}", market="{}")
        print(df)
        '''.format(stock,market)

        df=self.get_user_def_data(func=func)
        return df
    def stock_individual_fund_flow_rank(self,indicator="今日"):
        '''
        东方财富个股资金流排行
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_individual_fund_flow_rank(indicator="{}")
        print(df)
        '''.format(indicator)

        df=self.get_user_def_data(func=func)
        return df
    def stock_market_fund_flow(self):
        '''
        东方财富大盘资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_market_fund_flow()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def stock_sector_fund_flow_rank(self,indicator="今日", sector_type="行业资金流"):
        '''
        东方财富板块资金流排名
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_sector_fund_flow_rank(indicator="{}", sector_type="{}")
        print(df)
        '''.format(indicator,sector_type)
        df=self.get_user_def_data(func=func)
        return df
    def stock_main_fund_flow(self,symbol="全部股票"):
        '''
        东方财富主力净流入排名
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_main_fund_flow(symbol="{}")
        print(df)
        '''.format(symbol)
        df=self.get_user_def_data(func=func)
        return df
    def stock_sector_fund_flow_summary(self,symbol="电源设备", indicator="今日"):
        '''
        东方财富行业个股资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_sector_fund_flow_summary(symbol="{}", indicator="{}")
        print(df)
        '''.format(symbol,indicator)
        df=self.get_user_def_data(func=func)
        return df
    def stock_sector_fund_flow_hist(self,symbol="汽车服务"):
        '''
        东方财富行业历史资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_sector_fund_flow_hist(symbol="{}")
        print(df)
        '''.format(symbol)
        df=self.get_user_def_data(func=func)
        return df
    def stock_concept_fund_flow_hist(self,symbol="数据要素"):
        '''
        东方财富概念历史资金流
        '''
        func='''
        import xms_data_api as xms
        df=xms.stock_concept_fund_flow_hist(symbol="{}")
        print(df)
        '''.format(symbol)
        df=self.get_user_def_data(func=func)
        return df
    def fund_etf_spot_em(self):
        '''
        ETF基金实时行情-东财
        '''
        func='''
        import xms_data_api as xms
        df=xms.fund_etf_spot_em()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def fund_etf_spot_ths(self,date="20250808"):
        '''
        ETF基金实时行情-同花顺
        '''
        func='''
        import xms_data_api as xms
        df=xms.fund_etf_spot_ths(date="{}")
        print(df)
        '''.format(date)
        df=self.get_user_def_data(func=func)
        return df
    def fund_lof_spot_em(self):
        '''
        lof实时数据
        '''
        func='''
        import xms_data_api as xms
        df=xms.fund_lof_spot_em()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def fund_etf_hist_min_em(self,
            symbol="513100", 
            period="60", 
            adjust="hfq", 
            start_date="20250101", 
            end_date="20500101"):
        '''
        东方财富分时数据
        '''
        func='''
        import xms_data_api as xms
        df=xms.fund_etf_hist_min_em(
            symbol="{}", 
            period="{}", 
            adjust="{}", 
            start_date="{}", 
            end_date="{}")
        print(df)
        '''.format(symbol,period,adjust,start_date,end_date)
        df=self.get_user_def_data(func=func)
        return df
    def fund_etf_hist_em(self,
        symbol="513100", 
        period="daily", 
        start_date="20250101", 
        end_date="20500101", 
        adjust=""):
        '''
        东方财富历史数据ETF
        '''
        func='''
        import xms_data_api as xms
        df=xms.fund_etf_hist_em(
            symbol="{}", 
            period="{}", 
            start_date="{}", 
            end_date="{}", 
            adjust="{}")
        print(df)
        '''.format(symbol,period,start_date,end_date,adjust)
        df=self.get_user_def_data(func=func)
        return df
    def reits_realtime_em(self):
        '''
        获取REITs-实时行情
        '''
        func='''
        import xms_data_api as xms
        df=xms.reits_realtime_em()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def reits_hist_em(self,stock="508060"):
        '''
        获取REITs-历史行情
        '''
        func='''
        import xms_data_api as xms
        df=xms.reits_hist_em(symbol="{}")
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def get_cov_bond_hist_data(self,
        stock='113069',
        start='20100101',
        end='20500101',
        limit='10000',
        data_type='D',
        fqt='1',
        count=8000):
        '''
        获取可转债多周期行情数据
        '''
        func='''
        from trader_tool.bond_cov_data import bond_cov_data
        api=bond_cov_data()
        df=api.get_cov_bond_hist_data(
            stock='{}',
            start='{}',
            end='{}',
            limit='{}',
            data_type='{}',
            fqt='{}',
            count='{}')
        print(df)
        '''.format(stock,start,end,limit,data_type,fqt,count)
        df=self.get_user_def_data(func=func)
        return df
    def get_cov_bond_spot_trader_data(self,stock='113069'):
        '''
        可转债分时成交数据
        '''
        func='''
        from trader_tool.bond_cov_data import bond_cov_data
        api=bond_cov_data()
        df=api.get_cov_bond_spot_trader_data(stock='{}')
        print(df)
        '''.format(stock)
        df=self.get_user_def_data(func=func)
        return df
    def bond_zh_cov(self):
        '''
        可转债一览表
        '''
        func='''
        import xms_data_api as api
        df=api.bond_zh_cov()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def bond_cov_comparison(self):
        '''
        可转债比价表
        '''
        func='''
        import xms_data_api as api
        df=api.bond_cov_comparison()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def bond_zh_cov_value_analysis(self,symbol="113664"):
        '''
        可转债价值分析
        '''
        func='''
        import xms_data_api as api
        df=api.bond_zh_cov_value_analysis(symbol="{}")
        print(df)
        '''.format(symbol)
        df=self.get_user_def_data(func=func)
        return df
    def bond_zh_cov_value_analysis(self,symbol="113664"):
        '''
        可转债溢价率分析
        '''
        func='''
        import xms_data_api as api
        df=api.bond_zh_cov_value_analysis(symbol="{}")
        print(df)
        '''.format(symbol)
        df=self.get_user_def_data(func=func)
        return df
    def bond_cb_redeem_jsl(self):
        '''
        可转债强制赎回
        '''
        func='''
        import xms_data_api as api
        df=api.bond_cb_redeem_jsl()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def bond_cb_index_jsl(self):
        '''
        可转债等权指数
        '''
        func='''
        import xms_data_api as api
        df=api.bond_cb_index_jsl()
        print(df)
        '''
        df=self.get_user_def_data(func=func)
        return df
    def get_ETF_fund_hist_data(self,
        stock='159805',
        end='20500101',
        limit='1000000',
        data_type='D',
        fqt='1',
        count=8000):
        '''
        etf多周期行情数据
        '''
        func='''
        from trader_tool.etf_fund_data import etf_fund_data
        api=etf_fund_data()
        df=api.get_ETF_fund_hist_data(
            stock='{}',
            end='{}',
            limit='{}',
            data_type='{}',
            fqt='{}',
            count='{}')
        print(df)
        '''.format(stock,end,limit,data_type,fqt,count)
        df=self.get_user_def_data(func=func)
        return df












        











    

    

    
   


if __name__=='__main__':
    '''
    西蒙斯金融量化交易数据库
    作者:西蒙斯量化
    微信:xms_quants1
    '''
    client=xms_quants_data_client(
       )
    df=client.get_user_info()
    print(df)
    df=client.check_password_is_av_user()
    print(df)
    df=client.get_industry_fund_data()
    df=client.data_to_pandas(df)
    df.to_excel(r'全市场基金.xlsx')
    print(df)